package com.sheng.leetcode.year2023.month06.day06;

import org.junit.Test;

/**
 * @author liusheng
 * @date 2023/06/06
 * <p>
 * 2352. 相等行列对<p>
 * <p>
 * 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid ，返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。<p>
 * 如果行和列以相同的顺序包含相同的元素（即相等的数组），则认为二者是相等的。<p>
 * <p>
 * 示例 1：<p>
 * 输入：grid = [[3,2,1],[1,7,6],[2,7,7]]<p>
 * 输出：1<p>
 * 解释：存在一对相等行列对：<p>
 * - (第 2 行，第 1 列)：[2,7,7]<p>
 * <p>
 * 示例 2：<p>
 * 输入：grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]]<p>
 * 输出：3<p>
 * 解释：存在三对相等行列对：<p>
 * - (第 0 行，第 0 列)：[3,1,2,2]<p>
 * - (第 2 行, 第 2 列)：[2,4,2,2]<p>
 * - (第 3 行, 第 2 列)：[2,4,2,2]<p>
 * <p>
 * 提示：<p>
 * n == grid.length == grid[i].length<p>
 * 1 <= n <= 200<p>
 * 1 <= grid[i][j] <= 10^5<p>
 * <p>
 * 来源：力扣（LeetCode）<p>
 * 链接：<a href="https://leetcode.cn/problems/equal-row-and-column-pairs">2352. 相等行列对</a><p>
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。<p>
 */
public class LeetCode2352 {

    @Test
    public void test01() {
//        int[][] grid = {{3, 2, 1}, {1, 7, 6}, {2, 7, 7}};
        int[][] grid = {{3, 1, 2, 2}, {1, 4, 4, 5}, {2, 4, 2, 2}, {2, 4, 2, 2}};
        System.out.println(new Solution().equalPairs(grid));
    }
}

class Solution {
    public int equalPairs(int[][] grid) {
        // 题目解读，获取数组中横着的和竖着的存在相同元素的数目，并把横着的数目全部加起来
        int n = grid.length;
        int ans = 0;
        // 横着的循环
        for (int i = 0; i < n; i++) {
            // 竖着的循环
            for (int j = 0; j < n; j++) {
                int m = 1;
                // 竖着和横着对应的索引循环
                for (int k = 0; k < n; k++) {
                    // 有一个不相等则结束循环
                    if (grid[i][k] != grid[k][j]) {
                        m = 0;
                        break;
                    }
                }
                ans += m;
            }
        }
        return ans;
    }
}
